package org.hit.burkun.mapping;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

public interface IOnlineMappingProcessor {
	public static enum DBKEY {
		// Category:UniProt
		UniProtKB_AC_ID("ACC+ID"), UniProtKB_AC("ACC"), UniProtKB_ID("ID"), UniParc(
				"UPARC"), UniRef50("NF50"), UniRef90("NF90"), UniRef100("NF100"),
		// Category:Other sequence databases
		EMBL_GenBank_DDBJ("EMBL_ID"), EMBL_GenBank_DDBJ_CDS("EMBL"), PIR("PIR"), UniGene(
				"UNIGENE_ID"), GI_number("P_GI"), RefSeq_Protein("P_REFSEQ_AC"), RefSeq_Nucleotide(
				"REFSEQ_NT_ID"),
		// Category:3D structure databases
		PDB("PDB_ID"), DisProt("DISPROT_ID"),
		// Category:Protein-protein interaction databases
		BioGrid("BIOGRID_ID"), DIP("DIP_ID"), MINT("MINT_ID"), STRING("STRING"),
		// Category:Chemistry
		ChEMBL("CHEMBL_ID"), DrugBank("DRUGBANK_ID"), GuidetoPHARMACOLOGY(
				"GUIDETOPHARMACOLOGY_ID"),
		// Category:Protein family/group databases
		Allergome("ALLERGOME_ID"), MEROPS("MEROPS_ID"), mycoCLAP("MYCOCLAP_ID"), PeroxiBase(
				"PEROXIBASE_ID"), REBASE("REBASE_ID"), TCDB("TCDB_ID"),
		// Category:Polymorphism databases
		DMDM("DMDM_ID"),
		// Category:2D gel databases
		World_2DPAGE("WORLD_2DPAGE_ID"),
		// Category:Protocols and materials databases
		DNASU("DNASU_ID"),
		// Category:Genome annotation databases
		Ensembl("ENSEMBL_ID"), Ensembl_Protein("ENSEMBL_PRO_ID"), Ensembl_Transcript(
				"ENSEMBL_TRS_ID"), Ensembl_Genomes("ENSEMBLGENOME_ID"), Ensembl_Genomes_Protein(
				"ENSEMBLGENOME_PRO_ID"), Ensembl_Genomes_Transcript(
				"ENSEMBLGENOME_TRS_ID"), GeneID("P_ENTREZGENEID"), KEGG(
				"KEGG_ID"), PATRIC("PATRIC_ID"), UCSC("UCSC_ID"), VectorBase(
				"VECTORBASE_ID"),
		// Category:Organism-specific gene databases
		ArachnoServer("ARACHNOSERVER_ID"), CGD("CGD"), ConoServer(
				"CONOSERVER_ID"), CYGD("CYGD_ID"), dictyBase("DICTYBASE_ID"), EchoBASE(
				"ECHOBASE_ID"), EcoGene("ECOGENE_ID"), euHCVdb("EUHCVDB_ID"), EuPathDB(
				"EUPATHDB_ID"), FlyBase("FLYBASE_ID"), GeneCards("GENECARDS_ID"), GeneFarm(
				"GENEFARM_ID"), GenoList("GENOLIST_ID"), H_InvDB("H_INVDB_ID"), HGNC(
				"HGNC_ID"), HPA("HPA_ID"), LegioList("LEGIOLIST_ID"), Leproma(
				"LEPROMA_ID"), MaizeGDB("MAIZEGDB_ID"), MIM("MIM_ID"), MGI(
				"MGI_ID"), neXtProt("NEXTPROT_ID"), Orphanet("ORPHANET_ID"), PharmGKB(
				"PHARMGKB_ID"), PomBase("POMBASE_ID"), PseudoCAP("PSEUDOCAP_ID"), RGD(
				"RGD_ID"), SGD("SGD_ID"), TAIR("TAIR_ID"), TubercuList(
				"TUBERCULIST_ID"), WormBase("WORMBASE_ID"), WormBase_Transcript(
				"WORMBASE_TRS_ID"), WormBase_Protein("WORMBASE_PRO_ID"), Xenbase(
				"XENBASE_ID"), ZFIN("ZFIN_ID"),
		// Category:Phylogenomic databases
		eggNOG("EGGNOG_ID"), GeneTree("GENETREE_ID"), HOGENOM("HOGENOM_ID"), HOVERGEN(
				"HOVERGEN_ID"), KO("KO_ID"), OMA("OMA_ID"), OrthoDB(
				"ORTHODB_ID"), ProtClustDB("PROTCLUSTDB_ID"), TreeFam(
				"TREEFAM_ID"),
		// Category:Enzyme and pathway databases
		BioCyc("BIOCYC_ID"), Reactome("REACTOME_ID"), UniPathWay(
				"UNIPATHWAY_ID"),
		// Category:Gene expression databases
		CleanEx("CLEANEX_ID"),
		// Category:Other
		ChiTaRS("CHITARS_ID"), GenomeRNAi("GENOMERNAI_ID"), GeneWiki(
				"GENEWIKI_ID"), NextBio("NEXTBIO_ID");
		private String tag;

		DBKEY(String tag) {
			this.tag = tag;
		}

		public String getTag() {
			return tag;
		}

		public boolean equals(String str) {
			return str.equals(tag);
		}

		@Override
		public String toString() {
			return tag;
		}
	}

	void process(DBKEY fromKey, DBKEY toKey, Map<String, Set<String>> resData);

	void mapping(DBKEY fromKey, DBKEY toKey, Collection<String> data);
}
